import {
  deliverList,
  deliverDetail,
  addDeliver,
  editDeliver,
  delDeliver,
} from "@/common/apis/deliver";

export default {
  state() {
    return {
      list: [],
    };
  },

  getters: {
    defaultDeliver(state) {
      console.log(state);
      return state.list.find((i) => i.is_default);
    },
  },

  mutations: {
    setDeliverList(state, data) {
      state.list = data;
    },
  },

  actions: {
    // 收货地址列表
    async fetchDeliverList({ state, commit }) {
      const response = await deliverList();
      if (response) {
        commit("setDeliverList", response);
      }
      return response;
    },
    /**
     * 异步获取指定ID的收货地址详情
     * @param {Object} context - Vuex 上下文对象，包含 state 和 commit 方法
     * @param {Object} context.state - Vuex 的 state 对象
     * @param {Function} context.commit - Vuex 的 commit 方法，用于提交 mutation
     * @param {number} id - 要获取详情的收货地址ID
     * @returns {Promise} - 返回一个 Promise，包含获取到的收货地址详情
     */
    async fetchDeliverDetail({ state, commit }, id) {
      // 调用 deliverDetail 函数获取指定ID的收货地址详情
      const response = await deliverDetail(id);
      // 如果获取成功
      if (response) {
        // 返回一个成功的 Promise，包含获取到的收货地址详情
        return Promise.resolve(response);
      }
      // 如果获取失败，返回一个失败的 Promise，包含错误信息
      return Promise.reject(response);
    },
    // 添加收货地址
    async fetchAddDeliver({ state, dispatch }, payload) {
      const response = await addDeliver(payload);
      if (response) {
        await dispatch("fetchDeliverList");
      }
      return response;
    },
    // 修改收货地址
    async fetchEditDeliver({ state, dispatch }, payload) {
      const response = await editDeliver(payload);
      if (response) {
        await dispatch("fetchDeliverList");
      }
      return response;
    },
    // 删除收货地址
    async fetchDelDeliver({ state, dispatch }, id) {
      const response = await delDeliver(id);
      if (response) {
        await dispatch("fetchDeliverList");
      }
      return response;
    },
  },
};
